package ln;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;

import dao.DaoCliente;

import on.Cliente;
import util.Basededatos;
import excepciones.FiltroClienteException;

/**
 * Gestion clientes
 * 
 * @author lgonzalez
 * @version 1.0 15-05-2013
 * @since 15-05-2013
 *
 */
public class GestorCliente {

	public Cliente altaCliente(Cliente cli) throws SQLException,
			FiltroClienteException {

		if (!cli.getNif().isEmpty()){
		Cliente cliEval = new Cliente();
		cliEval.setNif(cli.getNif());
		if (this.consCliente(cliEval).getIdCliente() > 0)
			throw new FiltroClienteException("El nif ya existe");
		}

		int idCli = this.lastCliente();
		idCli++;
		cli.setIdCliente(idCli);

		Connection miCon = Basededatos.establecerConexion();
		miCon.setAutoCommit(false);
		Cliente toRetCli = null;

		int res = new DaoCliente().altaCliente(miCon, cli);

		if (res == 1) {

			miCon.commit();
			miCon.close();
		}

		// ara consulto el client que just acabo de crear i el carrego en ub obj
		// en la resposta

		toRetCli = this.consCliente(cli);

		return toRetCli;
	}

	public boolean modCliente(Cliente cli) throws SQLException,
			FiltroClienteException {

		if (cli.getIdCliente() == 0)
			throw new FiltroClienteException(
					"No es posible modificar un cliente cuyo id es igual a 0, consulte al administrador");

		Connection miCon = Basededatos.establecerConexion();
		miCon.setAutoCommit(false);
		boolean respuesta = false;
		int res = new DaoCliente().modCliente(miCon, cli);

		if (res == 1) {
			respuesta = true;
			miCon.commit();
			miCon.close();
		} else {
			miCon.rollback();
			miCon.close();
		}

		return respuesta;
	}

	public boolean estadoCliente(Cliente cli) throws SQLException {
		Connection miCon = Basededatos.establecerConexion();
		miCon.setAutoCommit(false);
		boolean respuesta = false;
		int res = new DaoCliente().estadoCliente(miCon, cli);

		if (res == 1) {
			respuesta = true;
			miCon.commit();
			miCon.close();
		} else {
			miCon.rollback();
			miCon.close();
		}
		return respuesta;
	}

	public Cliente consCliente(Cliente cli) throws SQLException,
			FiltroClienteException {
		Connection miCon = Basededatos.establecerConexion();
		miCon.setAutoCommit(false);
		Cliente miCli = new DaoCliente().consCliente(miCon, cli);		
		miCon.commit();
		miCon.close();
		return miCli;
	}

	public ArrayList<Cliente> consClientes(Cliente cli) throws SQLException,
			FiltroClienteException {
		ArrayList<Cliente> miRes = null;
		Connection miCon = Basededatos.establecerConexion();
		miCon.setAutoCommit(false);
		miRes = new DaoCliente().consClientes(miCon, cli);
		miCon.commit();
		miCon.close();
		return miRes;
	}

	public int lastCliente() throws SQLException, FiltroClienteException {

		Connection miCon = Basededatos.establecerConexion();
		miCon.setAutoCommit(false);

		int idCliente = new DaoCliente().lastCliente(miCon);

		miCon.commit();
		miCon.close();

		return idCliente;
	}

}
